home *** CD-ROM | disk | FTP | other *** search
- /*
- ** File: Music.c
- ** Easy to use wrapper for the MADF music file playing library
- **
- ** Written by: Bill Hayden
- ** Nikol Software
- **
- ** Copyright © 1995 Nikol Software
- ** All rights reserved.
- */
-
-
-
- #include "Music.h"
- #include "MAD.h"
- #include "RDriver.h"
- #include "Sound.h"
-
- Boolean Playing = FALSE;
-
- OSErr LoadMusicDriver(void)
- {
- Boolean Stereo, StereoMixing, NewSoundManager = TRUE, hasASC;
- long gestaltAnswer;
- short myBit;
- NumVersion nVers;
-
-
-
- // HARDWARE IDENTIFICATION
-
- /****************/
- /** ASC CHIP ? **/
- /****************/
-
- Gestalt( gestaltHardwareAttr, &gestaltAnswer);
- myBit = gestaltHasASC;
- if( BitTst( &gestaltAnswer, 31-myBit) == false)
- hasASC = false;
- else
- hasASC = true;
-
- /**************/
- /** STEREO ? **/
- /**************/
-
- Gestalt( gestaltSoundAttr, &gestaltAnswer);
- myBit = gestaltStereoCapability;
- Stereo = BitTst( &gestaltAnswer, 31-myBit);
-
- /*********************/
- /** STEREO MIXING ? **/
- /*********************/
-
- myBit = gestaltStereoMixing;
- StereoMixing = BitTst( &gestaltAnswer, 31-myBit);
-
- /****************************/
- /** SOUND MANAGER >= 3.0 ? **/
- /****************************/
-
- nVers = SndSoundManagerVersion();
- if( nVers.majorRev >= 3 )
- NewSoundManager = true;
- else
- NewSoundManager = false;
-
- // choose the best driver for the current hardware
-
- if( Stereo && StereoMixing )
- {
- if( NewSoundManager == true)
- return RInitMusic( SMStereo, 4);
- else if ( hasASC )
- return RInitMusic( ASCStereo, 4);
- else
- return RInitMusic( SMDSP, 4);
- }
- else
- {
- if( NewSoundManager )
- {
- return RInitMusic( SMMono, 4);
- }
- else if( hasASC )
- {
- return RInitMusic( ASCMono, 4);
- }
- }
-
- return -1;
-
- }
-
-
-
- void PlayMusic(short ResNum)
- {
- RLoadMusicRsrc( 'MADF', ResNum );
-
- RPlayMusic();
- Reading = true;
- Playing = true;
- }
-
-
-
- void StopMusic(void)
- {
- if (Playing)
- {
- RStopMusic(); // Stop music
- CleanDriver();
- RClearMusic(); // Dispose the current music
- Playing = false;
- }
- }
-
-
-
- OSErr DisposeMusicDriver(void)
- {
- RQuitMusic();
- }